package gomz.pres.admin;

import gomz.pres.GUICategory;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 * Diese Klasse steuert das UI der Categorievewaltung. Es reagiert auf die Eingaben des Benutzers.
 * @author Dilji
 */
public class CACategoryadministration {
	// ********************************************************************************
	// Variablen
	// ********************************************************************************
	private MVerwaltung model;
	private GUIACategoryadministration view;
	private JFrame pWindow;
	
	//*********************************************************************************
	// Konstruktor
	// ********************************************************************************
	/**
	 * Konstruktor fuer den Controller fuer die Benutzerverwaltung
	 */
	public CACategoryadministration(JFrame pWindow, GUIACategoryadministration view, MVerwaltung model) {
		this.model = model;
		this.view = view;
		this.pWindow = pWindow;
		
		addListener();
	}
	
	// ********************************************************************************
	// Listener
	// ********************************************************************************
	/**
	 * Ereignisbehandlung fuer die Buttons
	 */
	private void addListener(){
		//Buttons**********************************************************************
		//Editieren
		view.getBtZedit().addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				doEdit();
			}
		});
		
		//Loeschen
		view.getBtZdel().addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				doDel();
			}
		});
		
		//Neue Kategorie erstellen
		view.getBtZnew().addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				doNew();
			}
		});
	}
	
	// ********************************************************************************
	// Methoden
	// ********************************************************************************
	/**
	 * Diese Methode fuellt die Kategorieliste
	 */
	public void fillData(){
		view.getLiZlist().setListData(model.getCategoryList());
	}
	
	/**
	 * Diese Methode prueft ob eine Kategorie ausgewaehlt wurde und oeffnet ein neues 
	 * Fenster um den Kategorienamen zu aendern
	 */
	public void doEdit(){
		String editCatName = null;
		String selectedCatName = null;
		Integer selctedCatIndex = null;
		
		selectedCatName = ((String)view.getLiZlist().getSelectedValue());
		selctedCatIndex = view.getLiZlist().getSelectedIndex();
				
		if(selectedCatName != null){
			GUICategory catGui = new GUICategory(pWindow, selectedCatName);
			if (catGui.showDialog()){
				editCatName = catGui.getTfCategory().getText();
			}
		} else{
			JOptionPane.showMessageDialog(pWindow, "Bitte w\u00e4hlen Sie eine Kategorie aus der Liste aus.", "Kategorie ausw\u00e4len", JOptionPane.INFORMATION_MESSAGE);
		}
		
		if((editCatName==null) || editCatName.equals("")) {
			// wenn kein Name, nichts machen
		} else {
			// Namen aendern
			boolean re = model.editCategory(editCatName, selctedCatIndex);
			if(!re){
				JOptionPane.showMessageDialog(pWindow, "Die Kategorie konnte nicht editiert werden", "Kategorie editieren", JOptionPane.ERROR_MESSAGE);
			}
			else{
				view.getLiZlist().setListData(model.getCategoryList());
			}
		}	
	}
	
	/**
	 * Diese Methode loescht eine Kategorie
	 */
	public void doDel(){
		
		// variabeln
		String selCatName = null;
		Integer selCatIndex = null;
		Integer reply = null;
		
		// Name und Index der Liste entnehmen
		selCatName = ((String)view.getLiZlist().getSelectedValue());
		selCatIndex = view.getLiZlist().getSelectedIndex();
		
		// Pruefen ob etwas aus Liste ausgewuehlt wurde
		if((selCatName==null) || selCatName.equals("")) {
			JOptionPane.showMessageDialog(pWindow, "Bitte w\u00e4hlen Sie eine Kategorie aus der Liste aus.", "Kategorie ausw\u00e4len", JOptionPane.INFORMATION_MESSAGE);
		} else{
			// es wurde etwas aus Liste gewaehlt
			reply = JOptionPane.showConfirmDialog(pWindow, "Soll " + selCatName + " wirklich gel\u00f6scht werden? ", selCatName + " l\u00f6schen", JOptionPane.YES_NO_OPTION);
			// pruefen ob ja geklickt wurde
			if (reply == JOptionPane.YES_OPTION) {
				// im Model loeschen
				boolean re = model.delCategory(selCatIndex);
				if(!re){
					JOptionPane.showMessageDialog(pWindow, "Die Kategorie konnte nicht gel\u00f6scht werden", "Kategorie l\u00f6schen", JOptionPane.ERROR_MESSAGE);
				}
				else{
					view.getLiZlist().setListData(model.getCategoryList());
				}
			}
		}		
	}
	
	/**
	 * Diese Methode speichert eine neue Kategorie
	 */
	public void doNew(){
		
		// variable neuer Name
		String newCatName = null;
		
		// Fenster oeffnen
		GUICategory catGui = new GUICategory(pWindow);
		if (catGui.showDialog()){
			newCatName = catGui.getTfCategory().getText();
			
			if((newCatName==null) || newCatName.equals("")) {
				JOptionPane.showMessageDialog(pWindow, "Die Kategorie wurde nicht erstellt, da kein Name angegeben wurde.", "Kategorie erstellen", JOptionPane.ERROR_MESSAGE);
			} else {
				// im Model hinzufuegen
				boolean re = model.addNewCategory(newCatName);
				if(!re){
					JOptionPane.showMessageDialog(pWindow, "Die Kategorie konnte nicht erstellt werden", "Kategorie erstellen", JOptionPane.ERROR_MESSAGE);
				}
				else{
					view.getLiZlist().setListData(model.getCategoryList());
				}
			}
		}
	}
}
